package com.flyqiu.flow.api.script;

import com.flyqiu.flow.model.entity.base.Variable;

import java.util.List;
import java.util.Map;

/**
 * 变量接口
 */
public interface IVariableScope  {
    /**
     * 添加子级变量作用域
     *
     * @param variableScope 子级变量
     */
    void append(IVariableScope variableScope);

    /**
     * 移除变量
     *
     * @param targetVariableScope
     */
    void remove(IVariableScope targetVariableScope);




    /**
     * 获取当前存储的变量
     * 获取变量时如果在子级变量作用域中存在优先获取子级作用域变量
     *
     * @return Map
     */
    Map<String, Variable> getVariableMap();

    /**
     * 获取全部变量
     * 获取全部变量会出现变量重复情况
     *
     * @return List
     */
    List<Variable> getVariables();

    /**
     * 添加变量
     *
     * @param varName
     * @param varVal
     */
    void addTempVar(String varName, Object varVal);

    /**
     * 是否存在变量
     *
     * @param varName
     * @return boolean true 存在 false 不存在
     */
    boolean hasVar(String varName);

    /**
     * 获取变量
     *
     * @param varName
     * @return Object 获取变量值
     */
    Object getVal(String varName);

    /**
     * 变量数量
     *
     * @return
     */
    long varCount();
}
